home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / ldbmp08 / ldbmp08s.lzh / LDBMP.S < prev    next >
Text File  |  1997-09-28  |  58KB  |  2,521 lines

  1. *********************************************************************************
  2. *    BMP Loader                    <LDBMP.X Ver. 0.06>    *
  3. *********************************************************************************
  4.  
  5.     .include    doscall.mac
  6.     .include    iocscall.mac
  7.     .include    myconst.h
  8.  
  9.     .xref    _Bit1_prt
  10.     .xref    _Rle4_extend
  11.     .xref    _Bit4_prt
  12.     .xref    _Bit4_scroll
  13.     .xref    _Rle8_extend
  14.     .xref    _Bit8_conv
  15.     .xref    _Bit8_prt
  16.     .xref    _Bit8_scroll
  17.     .xref    _Bit8_rewrite
  18.     .xref    _Bit16_conv
  19.     .xref    _Bit24_conv
  20.     .xref    _Bit24_prt
  21.     .xref    _Bit24_scroll
  22.     .xref    _Bit24_rewrite
  23.     .xref    _Tone_down
  24.     .xref    _Tone_up
  25.  
  26.     .xref    _Wait
  27.  
  28.     .xdef    pal_set0
  29.     .xdef    scroll_int
  30.     .xdef    gr_on0
  31.     .xdef    gr_int0
  32.     .xdef    gr_off0
  33.     .xdef    key_chk
  34.     .xdef    tenkey_chk
  35.     .xdef    cursor_chk
  36.     .xdef    mouse_chk
  37.     .xdef    x_set
  38.     .xdef    y_set
  39.     .xdef    v_wait
  40.     .xdef    inf_change
  41.  
  42.     .xdef    line_byte
  43.     .xdef    tate
  44.     .xdef    yoko
  45.     .xdef    x_max
  46.     .xdef    y_max
  47.     .xdef    x_pos
  48.     .xdef    y_pos
  49.     .xdef    crt_y
  50.     .xdef    os_type
  51.     .xdef    iro
  52.     .xdef    gr_addr
  53.     .xdef    buff_addr
  54.     .xdef    pal_addr
  55.     .xdef    d_pat
  56.     .xdef    fi_size
  57.     .xdef    kflg
  58.     .xdef    dflg
  59.     .xdef    mflg
  60.     .xdef    nflg
  61.     .xdef    esc_flg
  62.     .xdef    next_flg
  63.     .xdef    resize_flg
  64.     .xdef    inkey_flg3
  65.     .xdef    scroll_key
  66.     .xdef    s_dot4
  67.     .xdef    s_dot8
  68.     .xdef    s_dot24
  69.  
  70. WIN3        equ    40
  71. OS2v1        equ    12
  72. OS2v2        equ    64
  73.  
  74. file_header:
  75. f_type:        equ    0        *ファイル識別子 'BM'
  76. f_size:        equ    2        *ファイルのサイズ
  77. f_reserved1:    equ    6        *予備1
  78. f_reserved2:    equ    8        *予備2
  79. f_offbits:    equ    10        *ファイル先頭からイメージデータへのオフセット
  80.  
  81. WIN3_HED:
  82. win3_size:    equ    14        *これ大きさ (12:OS/2 1.x,40:Windows3.x,64:OS/2 2.x)
  83. win3_width:    equ    18        *横サイズ
  84. win3_height:    equ    22        *縦サイズ
  85. win3_planes:    equ    26        *使用プレーン数
  86. win3_bitcount:    equ    28        *色数 (1:2色,4:16色,8:256色,24:16777216色)
  87. win3_comp:    equ    30        *圧縮アルゴリズム (0:無圧縮,1:RLE8,2:RLE4)
  88. win3_size_image    equ    34        *イメージデータのサイズ
  89. win3_xpels_pm:    equ    38        *X方向のディスプレイ分解能
  90. win3_ypels_pm:    equ    42        *Y方向のディスプレイ分解能
  91. win3_clr_used:    equ    46        *色変換テーブルの大きさ
  92. win3_clr_imp:    equ    50        *重要な色の数
  93.  
  94. OS21_HED:
  95. os21_size:    equ    14        *これ大きさ (12:OS/2 1.x,40:Windows3.x,64:OS/2 2.x)
  96. os21_width:    equ    18        *横サイズ
  97. os21_height:    equ    20        *縦サイズ
  98. os21_planes:    equ    22        *使用プレーン数
  99. os21_bitcount:    equ    24        *色数 (1:2色,4:16色,8:256色,24:16777216色)
  100.  
  101.     .text
  102.     .even
  103.  
  104. start:
  105.     lea.l    mysp(pc),sp        *スタックセット
  106.  
  107.     move.l    a0,-(sp)        *a0とっておく
  108.  
  109.     lea.l    16(a0),a0        *余分なメモリ開放
  110.     suba.l    a0,a1
  111.     move.l    a1,-(sp)
  112.     move.l    a0,-(sp)
  113.     DOS    _SETBLOCK
  114.     addq.l    #8,sp
  115.  
  116.     move.l    (sp)+,a0        *a0戻す
  117.  
  118.     bsr    wait_path_set        *waitデータのパス設定
  119.     bsr    wait_read        *waitデータの読み込み
  120.     bsr    cmdchk            *コマンドラインの解析
  121.     bsr    buf_get            *バッファ確保
  122.     bsr    super            *スーパーモードへ
  123.     bsr    cursol_clr        *カーソル消す
  124.     bsr    name_get        *ファイル名を取得し処理する
  125.     bsr    user            *ユーザモードへ
  126.     bsr    buf_free        *バッファ開放
  127.     bsr    wait_write        *waitデータの書き込み
  128.     bsr    exit            *終了処理
  129.     DOS    _EXIT
  130.  
  131. *****************************************************************
  132. *    ファイル名を取得し、ファイルの読み込みを行う        *
  133. *****************************************************************
  134. name_get:
  135.     clr.w    file_cnt        *ファイル数のカウント初期化
  136.  
  137.     bsr    chkname            *ファイル名に対する前処理
  138.     bsr    chkext            *拡張子が省略されているかチェック
  139.  
  140.     move.w    #ARCHIVE,-(sp)        *最初のファイルを検索する
  141.     pea.l    arg(pc)            *
  142.     pea.l    filbuf(pc)        *
  143.     DOS    _FILES            *
  144.     lea.l    10(sp),sp        *
  145.  
  146. loop:
  147.     tst.l    d0            *ファイルは見つかったか?
  148.     bmi    done            * 見つからなければ処理完了
  149.  
  150.     bsr    setpath            *得られたファイル名を
  151.                     * フルパスに再構成する
  152.  
  153.     bsr    main            *メイン処理
  154.  
  155.     tst.b    esc_flg            *エスケープ?
  156.     bne    done
  157.  
  158.     pea.l    filbuf(pc)        *つぎのファイルを検索する
  159.     DOS    _NFILES            *
  160.     addq.l    #4,sp            *
  161.  
  162.     bra    loop            *繰り返す
  163.  
  164. done:
  165.     bsr    rw_chk            *画面の描き直し
  166.     bsr    file_cnt_chk        *処理したファイル数のチェック
  167.     rts
  168.  
  169. *****************************************************************
  170. *    files実行に先立ってファイル名に前処理を加える        *
  171. *****************************************************************
  172. chkname:
  173.     pea.l    nambuf(pc)        *ファイル名を展開する
  174.     pea.l    arg(pc)            *
  175.     DOS    _NAMECK            *
  176.     addq.l    #8,sp            *
  177.  
  178.     tst.l    d0            *d0<0なら
  179.     bmi    name_er            * ファイル名の指定に誤りがある
  180.  
  181.     beq    nowild            *d0=0ならワイルドカード指定なし
  182.  
  183.     cmpi.w    #$00ff,d0        *d0≠FFHなら
  184.     bne    wild            * ワイルドカード指定あり
  185.  
  186. noname:                    *ファイル名が指定されていない場合
  187.     lea.l    arg(pc),a0        *バッファargに
  188.     lea.l    nambuf(pc),a1        * nameckで展開したパス名+'*.BMP'
  189.     bsr    strcpy            * を再構成する
  190.     lea.l    kome0(pc),a1        *
  191.     bsr    strcpy            *
  192.  
  193. wild:                    *ワイルドカードが指定された場合
  194.                     *何もしなくてよい
  195. cknam0:
  196.     rts
  197.  
  198. nowild:                    *ワイルドカードが指定されていない場合
  199.     move.w    #SUBDIR,-(sp)        *サブディレクトリであると仮定して
  200.     pea.l    arg(pc)            * 検索してみる
  201.     pea.l    filbuf(pc)        *
  202.     DOS    _FILES            *
  203.     lea.l    10(sp),sp        *
  204.     
  205.     tst.l    d0            *見つかったか?
  206.     bmi    cknam0            * 見つからなければファイルだろう
  207.  
  208.     lea.l    arg(pc),a0        *バッファargに
  209.     lea.l    komekome(pc),a1        * もとのファイル名+'\*.BMP'
  210.     bsr    strcat            * を再構成する
  211.  
  212.     bra    chkname            *nameckでファイル名を展開するために
  213.                     * サブルーチン先頭に戻る
  214.  
  215. *****************************************************************
  216. *    files,nfilesで見付けたファイル名をフルパスに構成し直し    *
  217. *        arg以降に格納する                *
  218. *****************************************************************
  219. setpath:
  220.     lea.l    arg(pc),a0        *a0=コピー先
  221.     lea.l    nambuf(pc),a1        *a1=nameckで展開したパス名
  222.     bsr    strcpy            *コピーする
  223.     lea.l    filbuf(pc),a1        *a1=files,nfilesで見付けたファイル名
  224.     lea.l    30(a1),a1
  225.     bsr    strcpy            *連結する
  226.     rts
  227.  
  228. *****************************************************************
  229. *    文字列の連結および複写                    *
  230. *    リターン時a0は文字列末の00Hを指す            *
  231. *****************************************************************
  232. strcat:
  233.     tst.b    (a0)+            *(a0)は0か?
  234.     bne    strcat            *そうでなければ繰り返す
  235.     subq.l    #1,a0            *行きすぎたから1つ戻る
  236. strcpy:
  237.     move.b    (a1)+,(a0)+        *1文字ずつ
  238.     bne    strcpy            *終了コードまでを転送する
  239.     subq.l    #1,a0            *a0は進み過ぎている
  240.                     *a0は文字列末の00Hを指す
  241.     rts
  242.  
  243. *****************************************************************
  244. *    拡張子を補う                        *
  245. *****************************************************************
  246. chkext:
  247.     lea.l    arg(pc),a0        *ファイル名のアドレス
  248.     lea.l    dext(pc),a1        *拡張子のアドレス
  249. chkext0:
  250.     cmp.b    #".",(a0)        *拡張子があるか
  251.     beq    chkext2
  252.     tst.b    (a0)+            *(a0)は0か?
  253.     bne    chkext0            *そうでなければ繰り返す
  254.     subq.l    #1,a0            *行きすぎたから1つ戻る
  255. chkext1:
  256.     move.b    (a1)+,(a0)+        *1文字転送
  257.     bne    chkext1            *終了コードまで繰り返す
  258. chkext2:
  259.     rts
  260.  
  261. *****************************************************************
  262. *    コマンドラインのチェックを行う                *
  263. *****************************************************************
  264. cmdchk:
  265.     lea.l    arg(pc),a0        *a0=引数切り出し領域
  266.     addq.l    #1,a2            *a2=コマンドライン文字列先頭
  267.     move.w    #1,clr_mode        *画面クリアモードの初期値
  268.     clr.w    bit4_crtdef        *16色BMPの画面モード初期値
  269.     clr.w    x_pos            *ロード座標の初期化
  270.     clr.w    y_pos
  271.  
  272. cmdchk0:
  273.     bsr    switch_chk        *スイッチのチェック
  274.  
  275.     tst.b    (a2)            *引数があるか?
  276.     beq    usage            *ないならファイル名が足りない
  277.     bsr    getarg            *ファイル名切り出し
  278.     bsr    switch_chk        *さらにスイッチのチェック
  279.     tst.b    (a2)            *引数があるか?
  280.     bne    usage            * あるなら引数が多い
  281. cmdchk1:
  282.     rts
  283.  
  284. *****************************************************************
  285. *    スペースを飛ばしつぎの引数先頭までポインタを進め    *
  286. *    スイッチがあれば処理してしまう                *
  287. *****************************************************************
  288. switch_chk:
  289.     bsr    skipsp            *スペースをスキップする
  290.     tst.b    (a2)            *まだスイッチがあるか?
  291.     beq    switch_chk2        *ないなら戻る(処理の振り分けを行う)
  292.  
  293.     cmpi.b    #'/',(a2)        *引数の先頭が
  294.     beq    switch_chk1        */,-であれば
  295.     cmpi.b    #'-',(a2)        *  スイッチ
  296.     beq    switch_chk1        *
  297.     bra    switch_chk2        *スイッチでないなら戻る
  298.  
  299. switch_chk1:
  300.     addq.l    #1,a2            *'/'や'-'の分ポインタを進める
  301.     tst.b    (a2)            *スイッチがあるか?
  302.     beq    usage            * ないなら使用方表示
  303.     move.b    (a2)+,d0        *1文字取り出す
  304.     bsr    toupper            *大文字に変換しておく
  305.  
  306.     cmpi.b    #'K',d0            *Kスイッチ?
  307.     beq    ksw            * そうなら分岐
  308.     cmpi.b    #'S',d0
  309.     beq    ssw
  310.     cmpi.b    #'C',d0
  311.     beq    csw
  312.     cmpi.b    #'L',d0
  313.     beq    lsw
  314.     cmpi.b    #'D',d0
  315.     beq    dsw
  316.     cmpi.b    #'M',d0
  317.     beq    msw
  318.     cmpi.b    #'F',d0
  319.     beq    fsw
  320.     cmpi.b    #'H',d0
  321.     beq    hsw
  322.     cmpi.b    #'W',d0
  323.     beq    wsw
  324.     cmpi.b    #'R',d0
  325.     beq    rsw
  326.     cmpi.b    #'N',d0
  327.     beq    nsw
  328.     bra    usage            *無効なスイッチが指定された
  329.  
  330. ksw:
  331.     tst.b    kflg            *スイッチの二重指定チェック
  332.     bne    usage
  333.     st    kflg            *KスイッチON
  334.     bra    switch_chk        *まだスイッチがあるかもしれない
  335.  
  336. ssw:
  337.     bsr    ssw_ana
  338.     bra    switch_chk
  339.  
  340. csw:
  341.     bsr    csw_ana
  342.     bra    switch_chk
  343.  
  344. lsw:
  345.     bsr    lsw_ana
  346.     bra    switch_chk
  347.  
  348. dsw:
  349.     tst.b    dflg
  350.     bne    usage
  351.     st    dflg
  352.     bra    switch_chk
  353.  
  354. msw:
  355.     tst.b    mflg
  356.     bne    usage
  357.     st    mflg
  358.     bra    switch_chk
  359.  
  360. fsw:
  361.     tst.b    fflg
  362.     bne    usage
  363.     st    fflg
  364.     bra    switch_chk
  365.  
  366. hsw:
  367.     tst.b    hflg
  368.     bne    usage
  369.     st    hflg
  370.     bra    switch_chk
  371.  
  372. wsw:
  373.     bsr    wsw_ana
  374.     bra    switch_chk
  375.  
  376. rsw:
  377.     tst.b    rflg
  378.     bne    usage
  379.     st    rflg
  380.     bra    switch_chk
  381.  
  382. nsw:
  383.     tst.b    nflg
  384.     bne    usage
  385.     st    nflg
  386.     bra    switch_chk
  387.  
  388. switch_chk2:
  389.     rts
  390.  
  391. *****************************************************************
  392. *    Sスイッチの解析                    *
  393. *****************************************************************
  394. ssw_ana:
  395.     tst.b    sflg            *Sスイッチの2重指定
  396.     bne    usage
  397.     st    sflg
  398.  
  399.     move.b    (a2),d0            *1文字取り出す
  400.     cmp.b    #' ',d0            *Sだけかな
  401.     beq    ssw_ana9        *画面モードの指定なし
  402.     bsr    num_read        *
  403.     cmp.w    crt_max(pc),d0        *
  404.     bhi    usage
  405.     move.w    d0,bit4_crtdef
  406.     subq.l    #1,a2            *1文字戻す
  407. ssw_ana9:
  408.     rts
  409.  
  410. *****************************************************************
  411. *    Cスイッチの解析                    *
  412. *****************************************************************
  413. csw_ana:
  414.     tst.b    cflg            *Cスイッチの2重指定
  415.     bne    usage
  416.     st    cflg
  417.  
  418.     move.b    (a2),d0            *1文字取り出す
  419.     cmp.b    #' ',d0            *Cだけかな
  420.     beq    csw_ana9        *画面クリアモードの指定なし
  421.     bsr    num_read
  422.     cmp.w    #3,d0
  423.     bhi    usage
  424.     move.w    d0,clr_mode
  425.     subq.l    #1,a2            *1文字戻す
  426. csw_ana9:
  427.     rts
  428.  
  429. *****************************************************************
  430. *    Wスイッチの解析                    *
  431. *****************************************************************
  432. wsw_ana:
  433.     tst.b    wflg
  434.     bne    usage
  435.     st    wflg
  436.  
  437.     move.b    (a2),d0
  438.     cmp.b    #' ',d0
  439.     beq    usage
  440.     bsr    num_read
  441.     cmp.w    #4096,d0
  442.     bhi    usage
  443.     move.w    d0,_Wait
  444.     subq.l    #1,a2
  445.     rts
  446.  
  447. *****************************************************************
  448. *    Lスイッチの解析                    *
  449. *****************************************************************
  450. lsw_ana:
  451.     move.b    (a2),d0            *1文字取り出す
  452.     bsr    toupper            *大文字に変換しておく
  453.     cmp.b    #'C',d0            *LCかな
  454.     bne    lsw_ana1
  455.     tst.b    lflg            *Lスイッチも指定している
  456.     bne    usage
  457.     tst.b    lcflg            *LCスイッチの2重指定
  458.     bne    usage
  459.     st    lcflg            *LCスイッチオン
  460.     addq.l    #1,a2            *1文字進める
  461.     bra    lsw_ana9
  462. lsw_ana1:
  463.     cmp.b    #' ',d0            *Lだけかな
  464.     bne    lsw_ana2        *ロード座標を指定している
  465.     clr.w    x_pos            *ロード座標を0,0
  466.     clr.w    y_pos
  467.     bra    lsw_ana9
  468. lsw_ana2:
  469.     bsr    num_read        *Xチェック
  470.     cmp.w    #1023,d0        *Xが1023を越える時
  471.     bhi    but_pos
  472.     move.w    d0,x_pos
  473.     cmp.b    #',',-1(a2)
  474.     bne    usage
  475.     bsr    num_read        *Yチェック
  476.     cmp.w    #1023,d0        *Yが1023を越える時
  477.     bhi    but_pos
  478.     move.w    d0,y_pos
  479.     st    lflg            *Lスイッチオン
  480.     subq.l    #1,a2            *1文字戻す
  481. lsw_ana9:
  482.     rts
  483.  
  484. *****************************************************************
  485. *    ファイル名を切り出す                    *
  486. *****************************************************************
  487. getarg:
  488.     move.l    a0,-(sp)        *{レジスタ待避
  489. gtarg0:    tst.b    (a2)            *1)文字列の終端コードか
  490.     beq    gtarg1            *
  491.     cmpi.b    #SPACE,(a2)        *2)スペースか
  492.     beq    gtarg1            *
  493.     cmpi.b    #TAB,(a2)        *3)タブか
  494.     beq    gtarg1            *
  495. *    cmpi.b    #'-',(a2)        *4)ハイフンか
  496. *    beq    gtarg1            *
  497.     cmpi.b    #'/',(a2)        *5)スラッシュ
  498.     beq    gtarg1            *
  499.     move.b    (a2)+,(a0)+        * が現れるまで転送を
  500.     bra    gtarg0            * 繰り返す
  501. gtarg1:    clr.b    (a0)            *文字列終端コードを書き込む
  502.     movea.l    (sp)+,a0        *}レジスタ復帰
  503.     rts
  504.  
  505. *****************************************************************
  506. *    スペース・TABをスキップする                *
  507. *****************************************************************
  508. skipsp0:
  509.     addq.l    #1,a2
  510. skipsp:
  511.     cmpi.b    #$20,(a2)
  512.     beq    skipsp0
  513.     cmpi.b    #$09,(a2)
  514.     beq    skipsp0
  515.     rts
  516.  
  517. *****************************************************************
  518. *    小文字→大文字変換ルーチン                *
  519. *****************************************************************
  520. toupper:
  521.     cmpi.b    #'a',d0
  522.     bcs    toupr0
  523.     cmpi.b    #'z'+1,d0
  524.     bcc    toupr0
  525.     subi.b    #$20,d0
  526. toupr0:
  527.     rts
  528.  
  529. *****************************************************************
  530. *    数字の解析    d0に数字を返す                *
  531. *****************************************************************
  532. num_read:
  533.     clr.w    d0
  534. num_read0:
  535.     clr.w    d1
  536.     move.b    (a2)+,d1
  537.     sub.b    #'0',d1
  538.     cmp.b    #10,d1
  539.     bcc.b    num_read1
  540.     mulu    #10,d0
  541.     add.w    d1,d0
  542.     bra.b    num_read0
  543. num_read1:
  544.     rts
  545.  
  546. *****************************************************************
  547. *    メイン処理                        *
  548. *****************************************************************
  549. main:
  550.     lea.l    arg(pc),a0        *ファイル名セット
  551.     bsr    file_open        *ファイルオープン
  552.     bsr    file_size        *ファイルサイズを調べる
  553.     move.l    d6,fi_size        *ファイルサイズセーブ
  554.  
  555.     movea.l    buff_addr(pc),a4    *バッファアドレス
  556.     moveq.l    #14+64,d6        *読み込むサイズ
  557.     bsr    file_read        *ヘッダ部分を読む
  558.  
  559.     bsr    size_chk        *画像サイズのチェック
  560.     tst.b    skip_flg
  561.     bne    main9
  562.  
  563.     bsr    line_byte_set        *1ラインのバイト数を求める
  564.     bsr    crtmode_set        *画面モードの設定
  565.     bsr    scroll_set        *スクロール変数の設定
  566.     bsr    lsw_chk            *ロード座標・センタリングチェック
  567.  
  568.     tst.b    int_flg            *1回目のグラフィック初期化ここで行う
  569.     bne    main1
  570. *    bsr    gr_off            *グラフィック画面オフ
  571.     bsr    scr_int            *画面の初期化
  572.     bsr    crtmode_int        *画面モードの初期化
  573.     bsr    scroll_int        *スクロール座標の初期化
  574.     bsr    gr_int            *グラフィック画面の初期化チェック
  575. main1:
  576.     move.l    fi_size(pc),d6
  577.     sub.l    #14+64,d6        *ヘッダ分縮める
  578.  
  579.     movea.l    buff_addr(pc),a4    *バッファに読み込む
  580.     lea.l    14+64(a4),a4
  581.     bsr    file_read        *ファイル読む
  582.     bsr    file_close        *ファイルクローズ
  583.  
  584.     bsr    henkan_chk        *変換の必要な画像のチェック
  585.  
  586.     tst.b    int_flg            *2回目以降のグラフィック初期化ここで行う
  587.     beq    main3
  588. *    bsr    gr_off            *グラフィック画面オフ
  589.     bsr    crtmode_int        *画面モードの初期化
  590.     bsr    scroll_int        *スクロール座標の初期化
  591.     bsr    gr_int            *グラフィック画面の初期化チェック
  592. main3:
  593.     bsr    pal_set            *パレット設定
  594.     bsr    gr_on            *グラフィック画面オン
  595.     bsr    inf_mode        *
  596.     bsr    gr_prt            *グラフィックを表示する
  597. main8:
  598.     bsr    scroll            *グラフィックをスクロール
  599.     add.w    #1,file_cnt        *ファイル数のカウント+1
  600. main9:
  601.     rts
  602.  
  603. *****************************************************************
  604. *    ファイルヘッダから画像サイズを求める            *
  605. *****************************************************************
  606. size_chk:
  607.     movea.l    buff_addr(pc),a0    *読み込んだデータの先頭
  608.  
  609.     tst.b    hflg
  610.     bne    size_chk1
  611.     cmp.w    #'BM',f_type(a0)    *ファイル識別子はあっているか
  612.     beq    size_chk1
  613.     bsr    file_er            *BMPファイルではない
  614.     bra    size_chk8
  615.  
  616. size_chk1:                *メモリチェック1
  617.     move.l    fi_size(pc),d0
  618.     cmp.l    buff_size(pc),d0
  619.     bls    size_chk2
  620.     bra    mem_chk5
  621.  
  622. size_chk2:
  623.     move.l    win3_size(a0),d0    *BMPの種類
  624.     bsr    i_to_m
  625.     move.w    d0,os_type
  626.  
  627.     cmp.b    #12,d0            *OS/2 1.x
  628.     beq    os21_chk
  629.     cmp.b    #40,d0            *Win 3.x
  630.     beq    win3_chk
  631.     cmp.b    #64,d0            *OS/2 2.x
  632.     beq    win3_chk        *Win3チェックで動くと思う
  633. *    bsr    no_win3_err
  634.     bsr    no_support_err
  635.     bra    size_chk8
  636.  
  637. *****************************************************************
  638. *    OS/2 1.xのサイズを求める                *
  639. *****************************************************************
  640. os21_chk:
  641.     move.w    os21_planes(a0),d0    *使用プレーン数は1か
  642.     ror.w    #8,d0
  643.     cmp.b    #1,d0
  644.     beq    os21_chk0
  645.     bsr    no_support_err
  646.     bra    size_chk8
  647.  
  648. os21_chk0:
  649.     move.w    os21_bitcount(a0),d0    *使用色数GET
  650.     ror.w    #8,d0
  651.     move.w    d0,iro
  652.  
  653.     cmp.w    #1,d0            *2
  654.     beq    os21_chk1
  655.     cmp.w    #4,d0            *16
  656.     beq    os21_chk1
  657.     cmp.w    #8,d0            *256
  658.     beq    os21_chk1
  659.     cmp.w    #24,d0            *Full
  660.     beq    os21_chk1
  661.     bsr    but_col_err        *それ以外は無視*
  662.     bra    size_chk8
  663.  
  664. os21_chk1:
  665.     move.w    os21_width(a0),d0    *横ドット数求める
  666.     ror.w    #8,d0
  667.     move.w    d0,yoko
  668.     move.w    os21_height(a0),d0    *縦ドット数求める
  669.     ror.w    #8,d0
  670.     move.w    d0,tate
  671.  
  672.     cmp.w    #24,iro
  673.     beq    os21_chk2
  674.  
  675.     move.l    f_offbits(a0),d0    *パレット数を求める
  676.     bsr    i_to_m
  677.     move.l    d0,d1
  678.     move.l    os21_size(a0),d0
  679.     bsr    i_to_m
  680.     sub.l    d0,d1
  681.     sub.l    #14,d1
  682.     divu.w    #3,d1            *おそい
  683.     move.w    d1,pal_cnt
  684.  
  685.     lea.l    os21_size(a0),a0    *パレットの先頭アドレスを求める
  686.     move.l    (a0),d0
  687.     bsr    i_to_m
  688.     add.l    d0,a0
  689.     move.l    a0,pal_addr
  690.  
  691.     move.w    pal_cnt(pc),d0        *グラフィックデータの先頭アドレスを求める
  692.     move.w    d0,d1            *パレット分たす
  693.     add.w    d0,d0
  694.     add.w    d1,d0
  695.     add.w    d0,a0
  696.     bra    os21_chk3
  697.  
  698. os21_chk2:
  699.     move.l    f_offbits(a0),d0
  700.     bsr    i_to_m
  701.     add.l    d0,a0
  702.  
  703. os21_chk3:
  704.     move.l    a0,gr_addr        *グラフィックの先頭アドレス
  705.     move.w    #0,compress
  706.     bra    mem_chk
  707.  
  708. *****************************************************************
  709. *    WIN3.xのサイズを求める                    *
  710. *****************************************************************
  711. win3_chk:
  712.     move.w    win3_planes(a0),d0    *使用プレーン数は1か
  713.     ror.w    #8,d0
  714.     cmp.b    #1,d0
  715.     beq    win3_chk1
  716.     bsr    no_support_err
  717.     bra    size_chk8
  718.  
  719. win3_chk1:
  720.     move.w    win3_bitcount(a0),d0    *使用色数GET
  721.     ror.w    #8,d0
  722.     move.w    d0,iro
  723.  
  724.     cmp.w    #1,d0            *2
  725.     beq    win3_chk2
  726.     cmp.w    #4,d0            *16
  727.     beq    win3_chk2
  728.     cmp.w    #8,d0            *256
  729.     beq    win3_chk2
  730.     cmp.w    #16,d0            *32k
  731.     beq    win3_chk2
  732.     cmp.w    #24,d0            *Full
  733.     beq    win3_chk2
  734.     bsr    but_col_err        *それ以外は無視*
  735.     bra    size_chk8
  736.  
  737. win3_chk2:
  738.     move.l    win3_comp(a0),d0    *圧縮モード
  739.     bsr    i_to_m
  740.     move.w    d0,compress
  741.  
  742.     move.l    win3_width(a0),d0    *横ドット数求める
  743.     bsr    i_to_m
  744.     move.w    d0,yoko
  745.     move.l    win3_height(a0),d0    *縦ドット数求める
  746.     bsr    i_to_m
  747.     move.w    d0,tate
  748.  
  749.     cmp.w    #24,iro            *フルカラーの時
  750.     beq    win3_chk3
  751.  
  752.     move.l    f_offbits(a0),d0    *パレット数を求める
  753.     bsr    i_to_m
  754.     move.l    d0,d1
  755.     move.l    win3_size(a0),d0
  756.     bsr    i_to_m
  757.     sub.l    d0,d1
  758.     sub.l    #14,d1
  759.     lsr.l    #2,d1
  760.     move.w    d1,pal_cnt
  761.  
  762.     lea.l    win3_size(a0),a0    *パレットの先頭アドレスを求める
  763.     move.l    (a0),d0
  764.     bsr    i_to_m
  765.     add.l    d0,a0
  766.     move.l    a0,pal_addr
  767.  
  768.     move.w    pal_cnt(pc),d0        *グラフィックデータの先頭アドレスを求める
  769.     add.w    d0,d0            *パレット分たす
  770.     add.w    d0,d0
  771.     add.w    d0,a0
  772.     move.l    a0,gr_addr
  773.     bra    mem_chk
  774. win3_chk3:
  775.     move.l    f_offbits(a0),d0
  776.     bsr    i_to_m
  777.     add.l    d0,a0
  778.     move.l    a0,gr_addr        *変換後画像アドレス
  779.  
  780. mem_chk:
  781.     cmp.w    #1,compress        *展開するメモリがあるか
  782.     bcs    mem_chk0        *normal
  783.     beq    mem_chk1        *rle8
  784.     bhi    mem_chk2        *rle4
  785.  
  786. mem_chk0:
  787.     moveq.l    #0,d0
  788.     bra    mem_chk3
  789.  
  790. mem_chk1:
  791.     move.w    yoko(pc),d0
  792.     addq.w    #3,d0
  793.     andi.w    #$fffc,d0
  794.     mulu.w    tate(pc),d0
  795.     bra    mem_chk3
  796.  
  797. mem_chk2:
  798.     move.w    yoko(pc),d0
  799.     addq.w    #1,d0
  800.     lsr.l    #1,d0
  801.     addq.w    #3,d0
  802.     and.w    #$fffc,d0
  803.     mulu.w    tate(pc),d0
  804.  
  805. mem_chk3:
  806.     cmp.w    #8,iro            *256色データを32kデータに
  807.     beq    mem_chk4        * 変換するメモリがあるか
  808.     tst.b    fflg
  809.     beq    mem_chk4
  810.     move.w    yoko(pc),d1
  811.     add.w    d1,d1
  812.     mulu.w    tate(pc),d1
  813.     add.w    d1,d0
  814.  
  815. mem_chk4:
  816.     add.l    fi_size(pc),d0
  817.     cmp.l    buff_size(pc),d0
  818.     bls    size_chk9
  819.  
  820. mem_chk5:
  821.     bsr    no_buff
  822.  
  823. size_chk8:                *スキップする画像の時
  824.     bsr    file_close
  825.     st    skip_flg
  826.     rts
  827.  
  828. size_chk9:
  829.     clr.b    skip_flg
  830.     rts
  831.  
  832. i_to_m:
  833.     ror.w    #8,d0
  834.     swap.w    d0
  835.     ror.w    #8,d0
  836.     rts
  837.  
  838. *****************************************************************
  839. *    1ラインのバイト数を求める                *
  840. *****************************************************************
  841. line_byte_set:
  842.     move.w    iro(pc),d0
  843.     cmp.w    #4,d0
  844.     bcs    lb_set1
  845.     beq    lb_set4
  846.  
  847.     cmp.w    #16,d0
  848.     bcs    lb_set8
  849.     beq    lb_set16
  850.     bhi    lb_set24
  851.  
  852. lb_set1:
  853.     move.w    yoko(pc),d0
  854.     add.w    #31,d0
  855.     lsr.w    #3,d0
  856.     and.w    #$fffc,d0
  857.     move.w    d0,line_byte
  858.     bra    line_byte_set9
  859.  
  860. lb_set4:
  861.     move.w    yoko(pc),d0
  862.     addq.w    #7,d0
  863.     lsr.w    #1,d0
  864.     and.w    #$fffc,d0
  865.     move.w    d0,line_byte
  866.     bra    line_byte_set9
  867.  
  868. lb_set8:
  869.     move.w    yoko(pc),d0
  870.     addq.w    #3,d0
  871.     andi.w    #$fffc,d0
  872.     move.w    d0,line_byte
  873.     bra    line_byte_set9
  874.  
  875. lb_set16:
  876.     move.w    yoko(pc),d0
  877.     add.w    d0,d0
  878.     addq.w    #3,d0
  879.     and.w    #$fffc,d0
  880.     move.w    d0,line_byte
  881.     bra    line_byte_set9
  882.  
  883. lb_set24:
  884.     move.w    yoko(pc),d0
  885.     move.w    d0,d1
  886.     add.w    d1,d1
  887.     add.w    d1,d0
  888.     addq.w    #3,d0
  889.     and.w    #$fffc,d0
  890.     move.w    d0,line_byte
  891.  
  892. line_byte_set9:
  893.     rts
  894.  
  895. *****************************************************************
  896. *    ロード座標のチェック                    *
  897. *****************************************************************
  898. lsw_chk:
  899.     tst.b    lflg            *Lスイッチ指定
  900.     bne    l_chk            *指定あり
  901.     tst.b    lcflg            *LCスイッチ指定
  902.     bne    lc_chk            *指定あり
  903.     rts
  904.  
  905. l_chk:
  906.     cmpi.w    #4,iro            *16色は特別(手抜き)
  907.     beq    l_chk5
  908.  
  909.     move.w    x_pos(pc),d0        *横にはみ出るか
  910.     beq    l_chk1
  911.     add.w    yoko(pc),d0
  912.     cmp.w    crt_x(pc),d0
  913.     bhi    but_pos            *はみ出る
  914. l_chk1
  915.     move.w    y_pos(pc),d0        *縦にはみ出るか
  916.     beq    l_chk2
  917.     add.w    tate(pc),d0
  918.     cmp.w    crt_y(pc),d0
  919.     bhi    but_pos            *はみ出る
  920. l_chk2
  921.     rts
  922.  
  923. l_chk5
  924.     move.w    x_pos(pc),d0
  925.     beq    l_chk6
  926.     add.w    yoko(pc),d0
  927.     cmp.w    #1024,d0
  928.     bhi    but_pos
  929. l_chk6
  930.     move.w    y_pos(pc),d0
  931.     beq    l_chk7
  932.     add.w    tate(pc),d0
  933.     cmp.w    #1024,d0
  934.     bhi    but_pos
  935. l_chk7
  936.     rts
  937.  
  938.  
  939. lc_chk:
  940.     clr.w    x_pos            *ロード座標を初期化
  941.     clr.w    y_pos
  942.  
  943.     move.w    crt_x(pc),d0        *X方向のセンタリング
  944.     sub.w    yoko(pc),d0
  945.     bmi    lc_chk1
  946.     lsr.w    #1,d0            *d0を1/2
  947.     move.w    d0,x_pos
  948. lc_chk1:
  949.     move.w    crt_y(pc),d0        *Y方向のセンタリング
  950.     sub.w    tate(pc),d0
  951.     bmi    lc_chk2
  952.     lsr.w    #1,d0            *d0を1/2
  953.     move.w    d0,y_pos
  954. lc_chk2:
  955.     rts
  956.  
  957. *****************************************************************
  958. *    スクロール画面の初期化                    *
  959. *****************************************************************
  960. scroll_int:
  961.     clr.w    d2            *スクロール座標初期化
  962.     clr.w    d3
  963.     bsr    x_set
  964.     bsr    y_set
  965.     rts
  966.  
  967. *****************************************************************
  968. *    画面モードの設定                    *
  969. *****************************************************************
  970. crtmode_set:
  971.     move.w    iro(pc),d0
  972.     cmp.w    #8,d0
  973.     bcs    crtmode_set1
  974.     beq    crtmode_set2
  975.     bra    crtmode_set3
  976.  
  977. crtmode_set1:                *2・16色
  978.     move.w    bit4_crtdef(pc),crt_mode
  979.     move.w    #$04,vctr_r0
  980.     move.w    #$30,vctr_r2
  981.     bra    crtmode_set4
  982.  
  983. crtmode_set2:                *256色
  984.     tst.b    fflg
  985.     bne    crtmode_set3
  986.     move.w    #5,crt_mode
  987.     move.w    #$01,vctr_r0
  988.     move.w    #$23,vctr_r2
  989.     bra    crtmode_set4
  990.  
  991. crtmode_set3:                *32k・1677色(Full)
  992.     move.w    #6,crt_mode
  993.     move.w    #$03,vctr_r0
  994.     move.w    #$2f,vctr_r2
  995. *    bra    crtmode_set4
  996. crtmode_set4:
  997.     rts
  998.  
  999. *****************************************************************
  1000. *    スクロール変数の設定                    *
  1001. *****************************************************************
  1002. scroll_set:
  1003.     lea.l    dot_tbl(pc),a0        *ドット数テーブル
  1004.     move.w    crt_mode(pc),d0
  1005.     add.w    d0,d0
  1006.     add.w    d0,d0
  1007.     move.l    0(a0,d0.w),a0
  1008.  
  1009.     move.w    (a0),crt_x        *CRTのXドット数
  1010.     move.w    2(a0),crt_y        *     Yドット数
  1011.  
  1012.     move.w    yoko(pc),d0        *横スクロール出来るドット数を計算
  1013.     sub.w    crt_x(pc),d0
  1014.     bpl    scroll_set0
  1015.     clr.w    d0
  1016. scroll_set0:
  1017.     move.w    d0,x_max
  1018.  
  1019.     move.w    tate(pc),d0        *縦スクロール出来るドット数を計算
  1020.     sub.w    crt_y(pc),d0
  1021.     bpl    scroll_set1
  1022.     clr.w    d0
  1023. scroll_set1:
  1024.     move.w    d0,y_max
  1025.  
  1026.     cmp.w    #4,iro            *16色以下か
  1027.     bhi    scroll_set4        *違う
  1028.  
  1029. scroll_set2:                *実画面スクロールのみ
  1030.     move.w    #1024,d0
  1031.     sub.w    crt_x(pc),d0
  1032.     cmp.w    x_max(pc),d0
  1033.     bcc    scroll_set3
  1034.     move.w    d0,x_max
  1035. scroll_set3:
  1036.     move.w    #1024,d0
  1037.     sub.w    crt_y(pc),d0
  1038.     cmp.w    y_max(pc),d0
  1039.     bcc    scroll_set4
  1040.     move.w    d0,y_max
  1041. scroll_set4:
  1042.     rts
  1043.  
  1044. *****************************************************************
  1045. *    画面の初期化を行う                    *
  1046. *****************************************************************
  1047. scr_int:
  1048.     st    int_flg            *画面の初期化は一回だけ
  1049.  
  1050.     move.w    clr_mode(pc),d0        *テキスト画面消去の指定があるか
  1051.     btst.l    #0,d0
  1052.     beq    scr_int9        *指定無し
  1053.  
  1054.     IOCS    _MS_CUROF        *マウスカーソル消す
  1055.     moveq.l    #0,d1            *ソフトキーボード消す
  1056.     moveq.l    #0,d2
  1057.     IOCS    _SKEY_MOD
  1058.     bsr    func_off        *ファンクションキー消す
  1059.     bsr    text_clr        *テキストクリア
  1060.     move.w    #$1e,d1            *カーソルをHOMEポジションへ
  1061.     IOCS    _B_PUTC
  1062. scr_int9:
  1063.     rts
  1064.  
  1065. *****************************************************************
  1066. *    画面のモードの初期化を行う                *
  1067. *****************************************************************
  1068. crtmode_int:
  1069.     move.w    vctr_r0(pc),$e82400    *色モード・実画面サイズ設定
  1070.     move.w    #$06e4,$e82500        *画面の優先順位
  1071.  
  1072.     cmp.w    #2,clr_mode        *グラフィック画面消去の指定
  1073.     bcs    crtmode_int1        *指定無し
  1074.  
  1075.     move.w    #$0020,$e82600        *GRoff・TEXTon
  1076.     bra    crtmode_int2
  1077. crtmode_int1:
  1078.     move.w    vctr_r2(pc),$e82600    *GRon・TEXTon
  1079. crtmode_int2:
  1080.     bsr    v_wait
  1081.     bsr    crtc_set        *crtcレジスタ設定
  1082.     rts
  1083.  
  1084. *****************************************************************
  1085. *    グラフィック画面の消去                    *
  1086. *****************************************************************
  1087. gr_int:
  1088.     cmp.w    #2,clr_mode        *グラフィック画面消去の指定が無い時は無視
  1089.     bcs    gr_int9            *指定無し
  1090.  
  1091. gr_int0:
  1092.     tst.b    mflg
  1093.     bne    gr_int1            *強制MPUクリア
  1094.  
  1095.     cmp.w    #4,iro            *16色以下か
  1096.     bhi    gr_int3            *違う
  1097.  
  1098.     move.w    yoko(pc),d0
  1099.     cmp.w    crt_x(pc),d0
  1100.     bhi    gr_int1
  1101.  
  1102.     move.w    tate(pc),d0
  1103.     cmp.w    crt_y(pc),d0
  1104.     bcs    gr_int3
  1105.  
  1106. gr_int1:
  1107.     move.w    $e80028,-(sp)
  1108.     movem.l    d0-d7/a0-a6,-(sp)
  1109.  
  1110.     move.b    #3,$e80028
  1111.  
  1112.     moveq.l    #0,d0            *レジスタクリア
  1113.     move.l    d0,d1
  1114.     move.l    d0,d2
  1115.     move.l    d0,d3
  1116.     move.l    d0,d4
  1117.     move.l    d0,d5
  1118.     move.l    d0,d6
  1119.     move.l    d0,d7
  1120.     movea.l    d0,a1
  1121.     movea.l    d0,a2
  1122.     movea.l    d0,a3
  1123.     movea.l    d0,a4
  1124.     movea.l    d0,a5
  1125.     movea.l    d0,a6
  1126.  
  1127.     movea.l    #GRAM_MAX,a0
  1128.     move.w    #512,line_cnt
  1129.  
  1130. gr_int2:
  1131.     movem.l    d0-d7/a1-a6,-(a0)    *14*4=56
  1132.     movem.l    d0-d7/a1-a6,-(a0)
  1133.     movem.l    d0-d7/a1-a6,-(a0)
  1134.     movem.l    d0-d7/a1-a6,-(a0)
  1135.     movem.l    d0-d7/a1-a6,-(a0)
  1136.     movem.l    d0-d7/a1-a6,-(a0)
  1137.     movem.l    d0-d7/a1-a6,-(a0)
  1138.     movem.l    d0-d7/a1-a6,-(a0)
  1139.     movem.l    d0-d7/a1-a6,-(a0)
  1140.     movem.l    d0-d7/a1-a6,-(a0)
  1141.     movem.l    d0-d7/a1-a6,-(a0)
  1142.     movem.l    d0-d7/a1-a6,-(a0)
  1143.     movem.l    d0-d7/a1-a6,-(a0)
  1144.     movem.l    d0-d7/a1-a6,-(a0)
  1145.     movem.l    d0-d7/a1-a6,-(a0)
  1146.     movem.l    d0-d7/a1-a6,-(a0)
  1147.     movem.l    d0-d7/a1-a6,-(a0)
  1148.     movem.l    d0-d7/a1-a6,-(a0)
  1149.     movem.l    d0-d3,-(a0)
  1150.     subq.w    #1,line_cnt
  1151.     bne    gr_int2
  1152.  
  1153.     movem.l    (sp)+,d0-d7/a0-a6
  1154.     move.w    (sp)+,$e80028
  1155.  
  1156.     bra    gr_int9
  1157.  
  1158. gr_int3:
  1159.     move.w    $e8002a,-(sp)        *ハードウェアクリア
  1160.     bsr    v_wait
  1161.     move.w    #$0f,$e8002a
  1162.     move.b    #$02,$e80481
  1163.     bsr    v_wait
  1164.     move.w    (sp)+,$e8002a
  1165.  
  1166. gr_int9:
  1167.     rts
  1168.  
  1169. *****************************************************************
  1170. *    グラフィックのオン                    *
  1171. *****************************************************************
  1172. gr_on:
  1173.     cmp.w    #2,clr_mode        *グラフィック画面消去の指定が無い時は無視
  1174.     bcs    gr_on1
  1175. gr_on0:
  1176.     bsr    v_wait
  1177. *    ori.w    #$003f,$e82600        *GRon・TEXTon
  1178.     move.w    vctr_r2(pc),d0        *GRon・TEXTon
  1179.     or.w    d0,$e82600        *GRon・TEXTon
  1180. gr_on1:
  1181.     rts
  1182.  
  1183. *****************************************************************
  1184. *    グラフィックのオフ                    *
  1185. *****************************************************************
  1186. gr_off:
  1187.     cmp.w    #2,clr_mode        *グラフィック画面消去の指定が無い時は無視
  1188.     bcs    gr_off1
  1189. gr_off0:
  1190.     bsr    v_wait
  1191.     andi.w    #$ffe0,$e82600        *GRoff
  1192. gr_off1:
  1193.     rts
  1194.  
  1195. *****************************************************************
  1196. *    パレットデータの設定                    *
  1197. *****************************************************************
  1198. pal_set:
  1199.     cmp.w    #5,crt_mode        *256色モードより大か
  1200.     bhi    pal_set2        *そう
  1201.  
  1202.     movea.l    pal_addr(pc),a0        *パレットの先頭アドレス
  1203.     move.l    #GPAL,a1        *パレットアドレス
  1204.  
  1205. pal_set0:
  1206.     move.w    pal_cnt(pc),d0        *パレット数
  1207.     cmp.w    #256,d0
  1208.     bls    pal_set1
  1209.     move.w    #256,d0
  1210.  
  1211. pal_set1:
  1212.     subq.w    #1,d0
  1213.     move.w    #$00f8,d7        *マスクデータ
  1214.  
  1215.     cmp.w    #OS2v1,os_type
  1216.     bne    ps_win3
  1217.  
  1218. ps_os2v1:
  1219.     move.b    (a0)+,d1        *B
  1220.     move.b    (a0)+,d2        *G
  1221.     move.b    (a0)+,d3        *R
  1222.     and.w    d7,d1
  1223.     and.w    d7,d2
  1224.     and.w    d7,d3
  1225.     lsr.w    #2,d1
  1226.     lsl.w    #3,d3
  1227.     lsl.w    #8,d2
  1228.     or.w    d2,d1
  1229.     or.w    d3,d1
  1230.     move.w    d1,(a1)+
  1231.     dbra    d0,ps_os2v1
  1232.     rts
  1233.  
  1234. ps_win3:
  1235.     move.b    (a0)+,d1        *B
  1236.     move.b    (a0)+,d2        *G
  1237.     move.b    (a0)+,d3        *R
  1238.     addq.w    #1,a0
  1239.     and.w    d7,d1
  1240.     and.w    d7,d2
  1241.     and.w    d7,d3
  1242.     lsr.w    #2,d1
  1243.     lsl.w    #3,d3
  1244.     lsl.w    #8,d2
  1245.     or.w    d2,d1
  1246.     or.w    d3,d1
  1247.     move.w    d1,(a1)+
  1248.     dbra    d0,ps_win3
  1249.     rts
  1250.  
  1251.  
  1252. pal_set2:                *65536色標準パレット
  1253.     moveq.l    #$0001,d0
  1254.     move.l    #$0202,d1
  1255.     movea.l    #GPAL,a0
  1256.  
  1257.     moveq.l    #512/4-1,d2
  1258. pal_set3:
  1259.     move.w    d0,(a0)+
  1260.     move.w    d0,(a0)+
  1261.     add.l    d1,d0
  1262.     dbra    d2,pal_set3
  1263. pal_set4:
  1264.     rts
  1265.  
  1266. *****************************************************************
  1267. *    変換の必要な画像のチェック                *
  1268. *****************************************************************
  1269. henkan_chk:
  1270.     cmp.w    #1,compress
  1271.     bcs    henkan_chk3        *normal
  1272.     beq    henkan_chk2        *rle8
  1273.     bhi    henkan_chk1        *rle4
  1274.  
  1275. henkan_chk1:
  1276.     bsr    _Rle4_extend
  1277.     bra    henkan_chk9
  1278.  
  1279. henkan_chk2:
  1280.     bsr    _Rle8_extend
  1281. *    bra    henkan_chk9
  1282.  
  1283. henkan_chk3:
  1284.     cmp.w    #8,iro
  1285.     bcs    henkan_chk9
  1286.     bhi    henkan_chk4
  1287.     tst.b    fflg            *通常表示か
  1288.     beq    henkan_chk9
  1289.     bsr    _Bit8_conv        *32k表示
  1290.     bra    henkan_chk9
  1291.  
  1292. henkan_chk4:
  1293.     cmp.w    #16,iro            *32k,fullカラーは先に変換しておく
  1294.     bhi    henkan_chk5
  1295.     bsr    _Bit16_conv
  1296.     bra    henkan_chk9
  1297.  
  1298. henkan_chk5:
  1299.     bsr    _Bit24_conv
  1300. *    bra    henkan_chk9
  1301.  
  1302. henkan_chk9:
  1303.     rts
  1304.  
  1305. *****************************************************************
  1306. *    グラフィックを表示する                    *
  1307. *****************************************************************
  1308. gr_prt:
  1309.     move.w    iro(pc),d0
  1310.     cmp.w    #4,d0
  1311.     bcs    bit1_prt
  1312.     beq    bit4_prt
  1313.     cmp.w    #8,d0
  1314.     beq    bit8_prt
  1315.     bhi    bit24_prt
  1316.  
  1317. bit1_prt:
  1318.     bsr    _Bit1_prt
  1319.     bra    gr_prt9
  1320. bit4_prt:
  1321.     bsr    _Bit4_prt
  1322.     bra    gr_prt9
  1323. bit8_prt:
  1324.     tst.b    fflg
  1325.     bne    bit24_prt
  1326.     bsr    _Bit8_prt
  1327.     bra    gr_prt9
  1328. bit24_prt:
  1329.     bsr    _Bit24_prt
  1330. *    bra    gr_prt9
  1331. gr_prt9:
  1332.     rts
  1333.  
  1334. *****************************************************************
  1335. *    グラフィックを描き直す                    *
  1336. *****************************************************************
  1337. rw_chk:
  1338.     tst.b    rflg
  1339.     beq    rw_end
  1340.  
  1341.     move.w    d2,d0
  1342.     add.w    d3,d0
  1343.     beq    rw_end
  1344.  
  1345.     tst.b    skip_flg
  1346.     bne    rw_end
  1347.     tst.b    resize_flg
  1348.     bne    rw_end
  1349.  
  1350.     move.w    iro(pc),d0
  1351.     cmp.w    #8,d0
  1352.     bcs    rw_end
  1353.     bhi    rw_chk24
  1354.  
  1355. rw_chk8:
  1356.     tst.b    fflg
  1357.     bne    rw_chk24
  1358.     bsr    _Bit8_rewrite
  1359.     bra    rw_end
  1360.  
  1361. rw_chk24:
  1362.     bsr    _Bit24_rewrite
  1363.  
  1364. rw_end:
  1365.     rts
  1366.  
  1367. *****************************************************************
  1368. *    ファイルのOPENを行う                *
  1369. *****************************************************************
  1370. file_open:
  1371.     move.w    #0,-(sp)        *ファイルopen
  1372.     move.l    a0,-(sp)
  1373.     DOS    _OPEN
  1374.     addq.l    #6,sp
  1375.     tst.l    d0            *OK?
  1376.     bmi    open_err
  1377.     move.l    d0,d7            *ファイルハンドルセーブ
  1378.     rts
  1379.  
  1380. *****************************************************************
  1381. *    ファイルのサイズを求める(d6に返す)            *
  1382. *****************************************************************
  1383. file_size:
  1384.     move.w    #2,-(sp)
  1385.     move.l    #0,-(sp)
  1386.     move.w    d7,-(sp)
  1387.     DOS    _SEEK
  1388.     addq.l    #8,sp
  1389.     tst.l    d0            *OK?
  1390.     bmi    read_err
  1391.  
  1392.     move.l    d0,d6
  1393.  
  1394.     move.w    #0,-(sp)
  1395.     move.l    #0,-(sp)
  1396.     move.w    d7,-(sp)
  1397.     DOS    _SEEK
  1398.     addq.l    #8,sp
  1399.     tst.l    d0            *OK?
  1400.     bmi    read_err
  1401.     rts
  1402.  
  1403. *****************************************************************
  1404. *    ディスクからデータの読み込みを行う            *
  1405. *****************************************************************
  1406. file_read:
  1407.     move.l    d6,-(sp)        *データサイズ
  1408.     move.l    a4,-(sp)        *バッファアドレス
  1409.     move.w    d7,-(sp)        *ファイルハンドル
  1410.     DOS    _READ
  1411.     lea    10(sp),sp        *スタック補正
  1412.     tst.l    d0            *OK?
  1413.     bmi    read_err
  1414.     cmp.l    d6,d0            *全部読めたか
  1415.     bne    read_err
  1416.     rts
  1417.  
  1418. *****************************************************************
  1419. *    ファイルをCLOSEする                *
  1420. *****************************************************************
  1421. file_close:
  1422.     move.w    d7,-(sp)        *ファイルCLOSE
  1423.     DOS    _CLOSE
  1424.     addq.l    #2,sp
  1425.     rts
  1426.  
  1427. *****************************************************************
  1428. *    スクロール制御                        *
  1429. *****************************************************************
  1430. scroll:
  1431.     sf    esc_flg
  1432.     sf    next_flg
  1433.     sf    resize_flg
  1434.     sf    inkey_flg1
  1435.     sf    inkey_flg2
  1436.     sf    inkey_flg3
  1437.  
  1438.     move.w    iro(pc),d0
  1439.     cmp.w    #8,d0
  1440.     bcs    bit4_scroll
  1441.     beq    bit8_scroll
  1442.     bhi    bit24_scroll
  1443.  
  1444. bit4_scroll:
  1445.     bsr    _Bit4_scroll
  1446.     bra    scroll9
  1447. bit8_scroll:
  1448.     tst.b    fflg
  1449.     bne    bit24_scroll
  1450.     bsr    _Bit8_scroll
  1451.     bra    scroll9
  1452. bit24_scroll:
  1453.     bsr    _Bit24_scroll
  1454. *    bra    scroll9
  1455. scroll9:
  1456.     rts
  1457.  
  1458. *****************************************************************
  1459. *    キー入力チェック                    *
  1460. *****************************************************************
  1461. key_chk:
  1462.     movea.w    #$800,a0
  1463.     btst.b    #1,(a0)            *ESCが押されたか?
  1464.     beq    key_chk_        *押されていない
  1465.     st    esc_flg            *ESCスイッチON
  1466.     bra    key_chk9
  1467.  
  1468. key_chk_:
  1469.     btst.b    #7,1(a0)        *BSが押されたか?
  1470.     beq    key_chk0        *押されていない
  1471.     st    esc_flg            *ESCスイッチON
  1472.     bra    key_chk9
  1473.  
  1474. key_chk0:
  1475.     btst.b    #5,3(a0)        *RETURNが押されたか?
  1476.     beq    key_chk1        *押されていない
  1477.     st    next_flg        *NEXTスイッチON
  1478.     bra    key_chk9
  1479.  
  1480. key_chk1:
  1481.     btst.b    #5,6(a0)        *SPACEが押されたか?
  1482.     beq    key_chk2
  1483.     st    next_flg
  1484.     bra    key_chk9
  1485.  
  1486. key_chk2:
  1487.     btst.b    #6,9(a0)        *ENTERが押されたか?
  1488.     beq    key_chk3
  1489.     st    next_flg
  1490.     bra    key_chk9
  1491.  
  1492. key_chk3:
  1493.     btst.b    #6,6(a0)        *HOMEが押されたか?
  1494.     beq    key_chk4
  1495.     tst.b    inkey_flg1
  1496.     bne    key_chk9
  1497.     st    inkey_flg1
  1498.     bsr    inf_change        *情報表示の変更
  1499.     bra    key_chk9
  1500.  
  1501. key_chk4:
  1502.     btst.b    #2,7(a0)        *UNDOが押されたか?
  1503.     beq    key_chk8
  1504.     tst.b    inkey_flg1
  1505.     bne    key_chk9
  1506.     st    inkey_flg1
  1507.     not.b    resize_flg
  1508.     bra    key_chk9
  1509.  
  1510. key_chk8:
  1511.     sf    inkey_flg1
  1512.  
  1513. key_chk9:
  1514.     rts
  1515.  
  1516. *****************************************************************
  1517. *    カーソル入力チェック                    *
  1518. *****************************************************************
  1519. cursor_chk:
  1520.     movea.w    #$807,a0        *カーソルキーのチェック
  1521.     move.b    (a0),d0
  1522.     ror.b    #3,d0
  1523.     andi.w    #$000f,d0
  1524.     move.b    d0,scroll_key
  1525.     rts
  1526.  
  1527. *****************************************************************
  1528. *    テンキー入力チェック                    *
  1529. *****************************************************************
  1530. tenkey_chk:
  1531.     movea.w    #$808,a0
  1532.     lea.l    scroll_key(pc),a1
  1533.     btst.b    #4,(a0)            *8押されたか?
  1534.     beq    tenkey_chk0        *押されていない
  1535.     or.b    #2,(a1)            *上セット
  1536. tenkey_chk0:
  1537.     btst.b    #7,(a0)            *4が押されたか?
  1538.     beq    tenkey_chk1        *押されていない
  1539.     or.b    #1,(a1)            *右セット
  1540. tenkey_chk1:
  1541.     movea.w    #$809,a0
  1542.     btst.b    #1,(a0)            *6が押されたか?
  1543.     beq    tenkey_chk2        *押されていない
  1544.     or.b    #4,(a1)            *左セット
  1545. tenkey_chk2:
  1546.     btst.b    #4,(a0)            *2が押されたか?
  1547.     beq    tenkey_chk3        *押されていない
  1548.     or.b    #8,(a1)            *下セット
  1549. tenkey_chk3:
  1550.     rts
  1551.  
  1552. *****************************************************************
  1553. *    マウスの入力チェック                    *
  1554. *****************************************************************
  1555. mouse_chk:
  1556.     IOCS    _MS_GETDT        *マウスからのデータをGET
  1557.  
  1558.     cmpi.b    #$ff,d0            *右ボタンが押されたか
  1559.     beq    mouse_right        *押された
  1560.     andi.w    #$ff00,d0        *左ボタンが押されたか
  1561.     bne    mouse_left        *押された
  1562.     sf    inkey_flg2
  1563.     bra    mouse_chk1
  1564.  
  1565. mouse_right:
  1566.     andi.w    #$ff00,d0        *更に左ボタンが押されたか
  1567.     bne    mouse_right1        *押された
  1568.  
  1569.     tst.b    inkey_flg2
  1570.     bne    mouse_right0
  1571.     st    inkey_flg2
  1572.     bsr    inf_change        *情報表示の変更
  1573.  
  1574. mouse_right0:
  1575.     IOCS    _MS_GETDT        *マウスからのデータをGET
  1576.     andi.w    #$ff00,d0        *左ボタンが押されたか
  1577.     beq    mouse_chk1        *押されていない
  1578.  
  1579. mouse_right1:
  1580.     st    esc_flg            *ESCスイッチON
  1581.     bra    mouse_chk1
  1582.  
  1583. mouse_left:
  1584.     st    next_flg        *NEXTスイッチON
  1585.  
  1586. mouse_chk1:
  1587.     swap    d0
  1588.     move.w    d0,d1
  1589.     andi.w    #$ff00,d0        *上位を残す
  1590.     andi.w    #$00ff,d1        *下位を残す
  1591.     ror.w    #8,d0            *
  1592.     lea.l    scroll_key(pc),a1
  1593.  
  1594. ms_xp:                    *X方向の移動量を調べる
  1595.     tst.b    d0            *移動量がプラス方向か?
  1596.     beq    ms_yp            *入力なし
  1597.     blt    ms_xm            *マイナスなら飛ぶ
  1598.  
  1599.     cmp.b    #1,d0
  1600.     bls    ms_yp            *移動量が少なければ無視
  1601.     or.b    #4,(a1)            *右セット
  1602.     bra    ms_yp
  1603. ms_xm:
  1604.     cmp.b    #-1,d0
  1605.     bcc    ms_yp
  1606.     or.b    #1,(a1)            *左セット
  1607. *    bra    ms_yp
  1608.  
  1609. ms_yp:                    *Y方向の移動量を調べる
  1610.     tst.b    d1            *移動量がプラス方向か?
  1611.     beq    mouse_chk9        *入力なし
  1612.     blt    ms_ym            *マイナスなら飛ぶ
  1613.  
  1614.     cmp.b    #1,d1
  1615.     bls    mouse_chk9        *移動量が少なければ無視
  1616.     or.b    #8,(a1)            *下セット
  1617.     bra    mouse_chk9
  1618. ms_ym:
  1619.     cmp.b    #-1,d1
  1620.     bcc    mouse_chk9
  1621.     or.b    #2,(a1)            *上セット
  1622. *    bra    mouse_chk9
  1623. mouse_chk9:
  1624.     rts
  1625.  
  1626. *****************************************************************
  1627. *    CRTCの値を設定する                    *
  1628. *****************************************************************
  1629. crtc_set:
  1630.     lea.l    crtc_tbl(pc),a0
  1631.     move.w    crt_mode(pc),d0
  1632.     add.w    d0,d0
  1633.     add.w    d0,d0
  1634.     move.l    0(a0,d0.w),a0
  1635.  
  1636.     tst.w    (a0)+            *HRL=0?
  1637.     beq    crtc_set0
  1638.     or.b    #%0010,$e8e007        *HRLビットを立てる
  1639.     bra    crtc_set1
  1640. crtc_set0:
  1641.     bclr.b    #1,$e8e007        *HRLビットを消す
  1642. crtc_set1:
  1643.     movea.l    #$e80000,a1
  1644.     move.w    (a0)+,$28(a1)        *crtc r20
  1645.  
  1646.     move.l    (a0)+,(a1)+        *crtc r00-r08
  1647.     move.l    (a0)+,(a1)+
  1648.     move.l    (a0)+,(a1)+
  1649.     move.l    (a0)+,(a1)+
  1650.     move.w    (a0),(a1)
  1651.     rts
  1652.  
  1653. *****************************************************************
  1654. *    情報の表示/非表示の変更を行う                *
  1655. *****************************************************************
  1656. inf_change:
  1657.     add.b    #1,prt_flg
  1658.     cmp.b    #2,prt_flg
  1659.     bcs    inf_change1
  1660.     beq    inf_change2
  1661.     bra    inf_change0
  1662.  
  1663. inf_change0:
  1664.     bsr    inf_off            *情報消去
  1665.     bsr    _Tone_up
  1666.     clr.b    prt_flg
  1667.     bra    inf_change9
  1668. inf_change1:
  1669.     bsr    inf_prt            *情報表示
  1670.     bra    inf_change9
  1671. inf_change2:
  1672.     bsr    _Tone_down
  1673. inf_change9:
  1674.     rts
  1675.  
  1676. inf_mode:
  1677.     cmp.b    #1,prt_flg
  1678.     bcs    inf_mode9
  1679.     beq    inf_mode1
  1680.     bra    inf_mode2
  1681. inf_mode1:
  1682.     bsr    inf_prt            *情報表示
  1683.     bra    inf_mode9
  1684. inf_mode2:
  1685.     bsr    inf_prt            *情報表示
  1686.     bsr    _Tone_down
  1687. inf_mode9:
  1688.     rts
  1689.  
  1690. *****************************************************************
  1691. *    情報の表示                        *
  1692. *****************************************************************
  1693. inf_prt:
  1694.     tst.b    prt_flg
  1695.     beq    inf_prt9        *ゼロなら表示しない
  1696.  
  1697.     bsr    v_wait
  1698.     bsr    inf_off
  1699.     bsr    name_prt        *ファイル名の表示
  1700.     bsr    size_prt        *サイズの表示
  1701.     bsr    col_prt            *色数の表示
  1702. inf_prt9:
  1703.     rts
  1704.  
  1705. *****************************************************************
  1706. *    ファイル名の表示                    *
  1707. *****************************************************************
  1708. name_prt:
  1709.     lea.l    prt_buf(pc),a0        *表示バッファの先頭アドレス
  1710.     lea.l    inf1(pc),a1        *'ファイル名:'をコピー
  1711.     bsr    strcpy
  1712.  
  1713.     lea.l    filbuf(pc),a1        *ファイル名をコピーする
  1714.     lea.l    30(a1),a1        *
  1715.     bsr    strcpy
  1716.  
  1717.     lea.l    crlf_mes(pc),a1        *改行コードをコピー
  1718.     bsr    strcpy
  1719.  
  1720.     lea.l    prt_buf(pc),a1
  1721.     IOCS    _B_PRINT        *ファイル名を表示
  1722.     rts
  1723.  
  1724. *****************************************************************
  1725. *    画像サイズの表示                    *
  1726. *****************************************************************
  1727. size_prt:
  1728.     lea.l    prt_buf(pc),a0        *コピー先
  1729.     lea.l    inf2(pc),a1        *'画像サイズ:'をコピー
  1730.     bsr    strcpy
  1731.  
  1732.     movea.l    a0,a2
  1733.     moveq.l    #0,d0            *横サイズ
  1734.     move.w    yoko(pc),d0
  1735.     bsr    suji_set
  1736.     move.b    #'x',(a2)+        *'x'
  1737.  
  1738.     moveq.l    #0,d0            *縦サイズ
  1739.     move.w    tate(pc),d0
  1740.     bsr    suji_set
  1741.  
  1742.     movea.l    a2,a0
  1743.     lea.l    crlf_mes(pc),a1        *改行コードをコピー
  1744.     bsr    strcpy
  1745.  
  1746.     lea.l    prt_buf(pc),a1
  1747.     IOCS    _B_PRINT        *画像サイズを表示
  1748.     rts
  1749.  
  1750. *****************************************************************
  1751. *    色数の表示                        *
  1752. *****************************************************************
  1753. col_prt:
  1754.     lea.l    prt_buf(pc),a0        *コピー先
  1755.     lea.l    inf3(pc),a1        *'色数   :'をコピー
  1756.     bsr    strcpy
  1757.  
  1758.     move.w    iro(pc),d0
  1759.     cmp.w    #1,d0            *2色
  1760.     beq    col_1
  1761.     cmp.w    #4,d0            *16色
  1762.     beq    col_4
  1763.     cmp.w    #8,d0            *256色
  1764.     beq    col_8
  1765.     cmp.w    #16,d0            *32k色
  1766.     beq    col_16
  1767.     cmp.w    #24,d0            *Full color(16777216)
  1768.     beq    col_24
  1769.     bra    col_??            *不明
  1770. col_1:
  1771.     lea.l    col1(pc),a1
  1772.     bra    col_set
  1773. col_4:
  1774.     lea.l    col4(pc),a1
  1775.     bra    col_set
  1776. col_8:
  1777.     lea.l    col8(pc),a1
  1778.     bra    col_set
  1779. col_16:
  1780.     lea.l    col16(pc),a1
  1781.     bra    col_set
  1782. col_24:
  1783.     lea.l    col24(pc),a1
  1784.     bra    col_set
  1785. col_??:
  1786.     lea.l    col??(pc),a1
  1787. *    bra    col_set
  1788. col_set
  1789.     bsr    strcpy            *色数をコピー
  1790.  
  1791.     lea.l    crlf_mes(pc),a1        *改行コードをコピー
  1792.     bsr    strcpy
  1793.  
  1794.     lea.l    prt_buf(pc),a1
  1795.     IOCS    _B_PRINT        *色数を表示
  1796.     rts
  1797.  
  1798. *****************************************************************
  1799. *    数字の設定                        *
  1800. *****************************************************************
  1801. suji_set:
  1802.     lea.l    num_buf(pc),a0
  1803.     move.b    #0,11(a0)        *終了位置
  1804.     bsr    bin2dec
  1805.     bsr    zero_keshi
  1806. suji_set1:
  1807.     move.b    (a0)+,(a2)+
  1808.     bne    suji_set1
  1809.     subq.l    #1,a2
  1810.     rts
  1811.  
  1812. *****************************************************************
  1813. *    2進=>10進                        *
  1814. *    d0 変換元の数値 a0 変換後の格納アドレス            *
  1815. *****************************************************************
  1816. bin2dec:
  1817.     movem.l    d0-d3/a0-a1,-(sp)
  1818.     moveq.l    #10-1,d1
  1819.     lea.l    exp_tbl(pc),a1
  1820. bin2dec0:
  1821.     clr.b    d2
  1822.     move.l    (a1)+,d3
  1823. bin2dec1:
  1824.     or    d3,d3
  1825.     sub.l    d3,d0
  1826.     bcs    bin2dec2
  1827.     addq.b    #1,d2
  1828.     bra    bin2dec1
  1829. bin2dec2:
  1830.     add.l    d3,d0
  1831.     add.b    #'0',d2
  1832.     move.b    d2,(a0)+
  1833.     dbra    d1,bin2dec0
  1834.     movem.l    (sp)+,d0-d3/a0-a1
  1835.     rts
  1836.  
  1837. exp_tbl:
  1838.     .dc.l    1000000000
  1839.     .dc.l    100000000
  1840.     .dc.l    10000000
  1841.     .dc.l    1000000
  1842.     .dc.l    100000
  1843.     .dc.l    10000
  1844.     .dc.l    1000
  1845.     .dc.l    100
  1846.     .dc.l    10
  1847.     .dc.l    1
  1848.  
  1849. *****************************************************************
  1850. *    頭にある'0'を消す                    *
  1851. *****************************************************************
  1852. zero_keshi:
  1853.     lea.l    num_buf(pc),a0
  1854.     move.w    #9-1,d0            *最期の'0'は残す
  1855. zero_keshi0:
  1856.     cmp.b    #'0',(a0)
  1857.     bne    zero_keshi9
  1858.     move.b    #SPACE,(a0)+
  1859. zero_keshi1:
  1860.     dbra    d0,zero_keshi0
  1861. zero_keshi9:
  1862.     rts
  1863.  
  1864. *****************************************************************
  1865. *    情報の消去                        *
  1866. *****************************************************************
  1867. inf_off:
  1868.     move.w    #$1a,d1            *TEXTクリア&HOMEポジションへ
  1869.     IOCS    _B_PUTC
  1870.     rts
  1871.  
  1872. *****************************************************************
  1873. *    スクロールX座標セット                    *
  1874. *****************************************************************
  1875. x_set:
  1876.     movea.l    #$e80000,a0
  1877.     move.w    d2,d0            *X座標
  1878.     move.w    d0,crtc_r12(a0)
  1879.     move.w    d0,crtc_r14(a0)
  1880.  
  1881.     cmp.w    #5,crt_mode        *256色モード
  1882.     bne    x_set1
  1883.     add.w    #256,d0            *page1のX座標(256色)
  1884. x_set1:
  1885.     move.w    d0,crtc_r16(a0)
  1886.     move.w    d0,crtc_r18(a0)
  1887.     rts
  1888.  
  1889. *****************************************************************
  1890. *    スクロールY座標セット                    *
  1891. *****************************************************************
  1892. y_set:
  1893.     movea.l    #$e80000,a0
  1894.     move.w    d3,crtc_r13(a0)        *スクリーン0のY座標
  1895.     move.w    d3,crtc_r15(a0)        *スクリーン1のY座標
  1896.     move.w    d3,crtc_r17(a0)        *スクリーン2のY座標
  1897.     move.w    d3,crtc_r19(a0)        *スクリーン3のY座標
  1898.     rts
  1899.  
  1900. *****************************************************************
  1901. *    画面の動機待ち                        *
  1902. *****************************************************************
  1903. v_wait:
  1904.     movea.l    #$e88001,a0
  1905.     moveq.l    #4,d0
  1906. v_wait0:
  1907.     btst.b    d0,(a0)
  1908.     beq    v_wait0
  1909. v_wait1:
  1910.     btst.b    d0,(a0)
  1911.     bne    v_wait1
  1912.     rts
  1913.  
  1914. *****************************************************************
  1915. *    テキスト画面の消去                    *
  1916. *****************************************************************
  1917. text_clr:
  1918.     movem.l    d0-d3/a3,-(sp)
  1919.     move.w    $E8002A,d0
  1920.     move.w    #%0000_0001_1111_0000,$E8002A
  1921.     movea.l    #TEXT1,a3
  1922.     move.w    #1024-1,d1
  1923. text_clr_lp:
  1924.     clr.l    (a3)+
  1925.     dbra.w    d1,text_clr_lp
  1926.     move.w    d0,$E8002A
  1927.  
  1928.     move.w    #$0001,d1
  1929.     move.w    #255,d2
  1930.     move.w    #$000F,d3
  1931.     IOCS    _TXRASCPY
  1932.     movem.l    (sp)+,d0-d3/a3
  1933.     rts
  1934.  
  1935. *****************************************************************
  1936. *    waitデータのパス名を設定                *
  1937. *****************************************************************
  1938. wait_path_set:
  1939.     lea.l    $80(a0),a1        *転送元
  1940.     lea.l    arg2(pc),a0        *転送先
  1941.     bsr    strcpy
  1942.     lea.l    wait_name(pc),a1    *指定したファイル名
  1943.     bsr    strcpy
  1944.     rts
  1945.  
  1946. *****************************************************************
  1947. *    waitデータ'bmp256.dat'を読み込む            *
  1948. *****************************************************************
  1949. wait_read:
  1950.     move.w    #0,-(sp)        *ファイルopen
  1951.     pea.l    arg2(pc)
  1952.     DOS    _OPEN
  1953.     addq.l    #6,sp
  1954.     tst.l    d0            *OK?
  1955.     bmi    wait_read9
  1956.  
  1957.     move.l    d0,d7            *ファイルハンドルセーブ
  1958.  
  1959.     move.l    #2,-(sp)        *データサイズ
  1960.     pea.l    _Wait(pc)        *バッファアドレス
  1961.     move.w    d7,-(sp)        *ファイルハンドル
  1962.     DOS    _READ
  1963.     lea    10(sp),sp        *スタック補正
  1964.  
  1965. *    tst.l    d0            *OK?
  1966. *    bmi    read_err
  1967. *    cmp.l    d6,d0            *全部読めたか
  1968. *    bne    read_err
  1969.  
  1970.     bsr    file_close
  1971.  
  1972.     tst.b    wflg            */W指定ならスキップ
  1973.     bne    wait_read9
  1974.     move.w    _Wait(pc),wait
  1975.  
  1976. wait_read9:
  1977.     rts
  1978.  
  1979. *****************************************************************
  1980. *    waitデータ'bmp256.dat'を書き込む            *
  1981. *****************************************************************
  1982. wait_write:
  1983.     move.w    wait(pc),d0
  1984.     cmp.w    _Wait(pc),d0
  1985.     beq    wait_write9
  1986.  
  1987.     move.w    #$20,-(sp)        *ファイルCREATE
  1988.     pea.l    arg2(pc)
  1989.     DOS    _CREATE
  1990.     addq.l    #6,sp
  1991.  
  1992. *    tst.l    d0
  1993. *    bmi    create_err
  1994.     tst.l    d0
  1995.     bmi    wait_write9
  1996.  
  1997.     move.l    d0,d7            *ファイルハンドルセーブ
  1998.  
  1999.     move.l    #2,-(sp)        *データサイズ
  2000.     pea.l    _Wait(pc)        *バッファアドレス
  2001.     move.w    d7,-(sp)        *ファイルハンドル
  2002.     DOS    _WRITE
  2003.     lea.l    10(sp),sp        *スタック補正
  2004.  
  2005. *    tst.l    d0            *OK?
  2006. *    bmi    write_err
  2007. *    cmp.l    d6,d0            *全部書き込めたか?
  2008. *    bne    write_err
  2009.  
  2010.     bsr    file_close
  2011.  
  2012.     lea.l    wait_change_mes(pc),a0
  2013.     bsr    mesput
  2014.  
  2015. wait_write9:
  2016.     rts
  2017.  
  2018. *****************************************************************
  2019. *    カーソル消す                        *
  2020. *****************************************************************
  2021. cursol_clr:
  2022.     move.b    $992.w,cur_save
  2023.     beq    cursol_clr9
  2024.     IOCS    _OS_CUROF
  2025.  
  2026. cursol_clr9:
  2027.     rts
  2028.  
  2029. *****************************************************************
  2030. *    カーソル戻す                        *
  2031. *****************************************************************
  2032. cursol_recv:
  2033.     tst.b    cur_save
  2034.     beq    cursol_recv9
  2035.     IOCS    _OS_CURON
  2036.  
  2037. cursol_recv9:
  2038.     rts
  2039.  
  2040. *****************************************************************
  2041. *    バッファ確保                        *
  2042. *****************************************************************
  2043. buf_get:
  2044.     pea.l    -1.w            *確保出来る最大サイズを取得
  2045.     DOS    _MALLOC
  2046.     addq.l    #4,sp
  2047.     andi.l    #$00ffffff,d0
  2048.     move.l    d0,d1
  2049.     move.l    d0,-(sp)
  2050.     DOS    _MALLOC
  2051.     addq.l    #4,sp
  2052.     tst.l    d0
  2053.     bmi    no_buff
  2054.  
  2055.     move.l    d0,buff_addr        *バッファアドレス
  2056.     move.l    d1,buff_size        *バッファサイズ
  2057.     rts
  2058.  
  2059. *****************************************************************
  2060. *    バッファ開放                        *
  2061. *****************************************************************
  2062. buf_free:
  2063.     pea.l    buff_addr(pc)        *バッファ開放
  2064.     DOS    _MFREE
  2065.     addq.l    #4,sp
  2066.     rts
  2067.  
  2068. *****************************************************************
  2069. *    スーパーモードにする                    *
  2070. *****************************************************************
  2071. super:
  2072.     clr.l    -(sp)            *スーパーバイザモードへ移行
  2073.     DOS    _SUPER
  2074.     addq.l    #4,sp
  2075.     move.l    d0,sp_save
  2076.     rts
  2077.  
  2078. *****************************************************************
  2079. *    ユーザーモードにする                    *
  2080. *****************************************************************
  2081. user:
  2082.     move.l    sp_save(pc),-(sp)    *ユーザーモードへ
  2083.     DOS    _SUPER
  2084.     addq.l    #4,sp
  2085.     rts
  2086.  
  2087. *****************************************************************
  2088. *    ファンクション表示を消す                *
  2089. *****************************************************************
  2090. func_off:
  2091.     lea.l    func_off_mes(pc),a0
  2092.     bsr    mesput
  2093.     rts
  2094.  
  2095. *****************************************************************
  2096. *    処理したファイル数をチェックする            *
  2097. *****************************************************************
  2098. file_cnt_chk:
  2099.     tst.w    file_cnt        *処理したファイルは0個か
  2100.     bne    file_cnt_chk1        *違う
  2101.     bsr    no_file            *ファイルが無かった
  2102. file_cnt_chk1:
  2103.     rts
  2104.  
  2105. *****************************************************************
  2106. *    処理するファイルがなかった                *
  2107. *****************************************************************
  2108. no_file:
  2109.     lea.l    no_file_mes(pc),a0
  2110.     bsr    mesput
  2111.     rts
  2112.  
  2113. *****************************************************************
  2114. *    ファイル名エラー                    *
  2115. *****************************************************************
  2116. name_er:
  2117.     lea.l    name_er_mes(pc),a0
  2118.     bsr    mesput
  2119.     bra    exit2
  2120.  
  2121. *****************************************************************
  2122. *    ファイルエラー                        *
  2123. *****************************************************************
  2124. file_er:
  2125.     lea.l    arg(pc),a0
  2126.     bsr    mesput
  2127.     lea.l    file_er_mes(pc),a0
  2128.     bsr    mesput
  2129.     rts
  2130.  
  2131. *****************************************************************
  2132. *    バージョン違い                        *
  2133. *****************************************************************
  2134. *no_win3_err:
  2135. *    lea.l    arg(pc),a0
  2136. *    bsr    mesput
  2137. *    lea.l    no_win3_mes(pc),a0
  2138. *    bsr    mesput
  2139. *    rts
  2140.  
  2141. *****************************************************************
  2142. *    サポートしていないBMP                    *
  2143. *****************************************************************
  2144. no_support_err:
  2145.     lea.l    arg(pc),a0
  2146.     bsr    mesput
  2147.     lea.l    no_support_mes(pc),a0
  2148.     bsr    mesput
  2149.     rts
  2150.  
  2151. *****************************************************************
  2152. *    色違い                            *
  2153. *****************************************************************
  2154. but_col_err:
  2155.     lea.l    arg(pc),a0
  2156.     bsr    mesput
  2157.     lea.l    but_col_mes(pc),a0
  2158.     bsr    mesput
  2159.     rts
  2160.  
  2161. *****************************************************************
  2162. *    メモリが足りない                    *
  2163. *****************************************************************
  2164. no_buff:
  2165.     lea.l    arg(pc),a0
  2166.     bsr    mesput
  2167.     lea.l    no_buff_mes(pc),a0
  2168.     bsr    mesput
  2169.     rts
  2170.  
  2171. *****************************************************************
  2172. *    ロード座標エラー                    *
  2173. *****************************************************************
  2174. but_pos:
  2175.     bsr    file_close        *ファイルクローズ
  2176.     lea.l    arg(pc),a0
  2177.     bsr    mesput
  2178.     lea.l    but_pos_mes(pc),a0
  2179.     bsr    mesput
  2180.     bra    exit2
  2181.  
  2182. *****************************************************************
  2183. *    ファイルが見付からない                    *
  2184. *****************************************************************
  2185. open_err:
  2186.     lea.l    arg(pc),a0
  2187.     bsr    mesput
  2188.     lea.l    open_er_mes(pc),a0
  2189.     bsr    mesput
  2190.     bra    exit2
  2191.  
  2192. *****************************************************************
  2193. *    読み込みエラー                        *
  2194. *****************************************************************
  2195. read_err:
  2196.     lea.l    arg(pc),a0
  2197.     bsr    mesput
  2198.     lea.l    read_er_mes(pc),a0
  2199.     bsr    mesput
  2200.     bra    exit2
  2201.  
  2202. *****************************************************************
  2203. *    使用方表示                        *
  2204. *****************************************************************
  2205. usage:
  2206.     lea.l    usage_mes(pc),a0
  2207.     bsr    mesput
  2208.     bra    exit2
  2209.  
  2210. *****************************************************************
  2211. *    メッセージ表示                        *
  2212. *****************************************************************
  2213. mesput:
  2214. *    move.w    #STDERR,-(sp)        *標準エラー出力へ
  2215.     move.w    #STDOUT,-(sp)        *標準出力へ
  2216.     move.l    a0,-(sp)        *メッセージを
  2217.     DOS    _FPUTS            *出力する
  2218.     addq.l    #6,sp            *スタック補正
  2219.     rts
  2220.  
  2221. *****************************************************************
  2222. *    終了処理                        *
  2223. *****************************************************************
  2224. exit:
  2225.     bsr    cursol_recv        *カーソル戻す
  2226.     IOCS    _MS_INIT        *キーバッファクリア
  2227.     moveq.l    #-1,d1
  2228.     IOCS    _SKEY_MOD
  2229.     move.w    #-1,-(sp)
  2230.     DOS    _KFLUSH
  2231.     addq.l    #2,sp
  2232.     rts
  2233.  
  2234. *****************************************************************
  2235. *    エラー処理2                        *
  2236. *****************************************************************
  2237. exit2:
  2238.     bsr    exit
  2239.     move.w    #1,-(sp)        *終了コード1を持って
  2240.     DOS    _EXIT2            * エラー終了
  2241.  
  2242. *****************************************************************
  2243. *    データエリア                        *
  2244. *****************************************************************
  2245.     .data
  2246.     .even
  2247. usage_mes:
  2248.     .dc.b    '2,16,256,full color BMP Loader V0.08 by A.MUKAWA',CR,LF
  2249.     .dc.b    '機能:BMPファイルを表示します',CR,LF
  2250.     .dc.b    '用法:LDBMP [スイッチ] ファイル名',CR,LF
  2251.     .dc.b    CR,LF
  2252.     .dc.b    '             /L[x,y]   ロード座標の指定',CR,LF
  2253.     .dc.b    '             /LC       画面中央に表示',CR,LF
  2254.     .dc.b    '             /K        表示後にキー入力待ち',CR,LF
  2255.     .dc.b    '             /Sn       2色,16色BMP表示の画面モード設定(n=0~4)',CR,LF
  2256.     .dc.b    '                         0: 768x512 31K (DEF)',CR,LF
  2257.     .dc.b    '                         1: 384x256 31K',CR,LF
  2258.     .dc.b    '                         2: 640x400 24K',CR,LF
  2259.     .dc.b    '                         3: 640x480 24K',CR,LF
  2260.     .dc.b    '                         4:1024x848 24K',CR,LF
  2261.     .dc.b    '             /Cn       画面クリアモードの設定(n=0~3)',CR,LF
  2262.     .dc.b    '                         0:画面消去を行わない',CR,LF
  2263.     .dc.b    '                         1:テキスト画面のみ消去(DEF)',CR,LF
  2264.     .dc.b    '                         2:グラフィック画面のみ消去',CR,LF
  2265.     .dc.b    '                         3:テキスト画面とグラフィック画面を消去',CR,LF
  2266.     .dc.b    '             /D        ディザ表示(フルカラーBMPと/F指定の256色BMPに有効)',CR,LF
  2267.     .dc.b    '             /F        256色BMPを65536色モードで表示',CR,LF
  2268.     .dc.b    '             /M        MPUに頑張ってもらう',CR,LF
  2269.     .dc.b    '             /H        識別ヘッダの"BM"をチェックしない',CR,LF
  2270.     .dc.b    '             /R        終了時に画面を描き直す',CR,LF
  2271.     .dc.b    '             /Wn       768x256dot 256色表示のウエイト値設定(n=0~4096)',CR,LF
  2272.     .dc.b    '             /N        上下逆に表示される謎の16bitBMPのときに指定',CR,LF
  2273.     .dc.b    CR,LF
  2274. *    .dc.b    '             /K指定時、画面からはみ出た部分があるとスクロール出来ます',CR,LF
  2275. *    .dc.b    '                       但し2色,16色ファイルは1024x1024dotまでの表示になります',CR,LF
  2276. *    .dc.b    '                       また、以下のキー操作を行えます',CR,LF
  2277. *    .dc.b    "                       'HOME'       インフォメーション表示",CR,LF
  2278. *    .dc.b    "                       'UNDO'       1画面表示(65536色モードのみ)",CR,LF
  2279. *    .dc.b    CR,LF
  2280.     .dc.b    '             768x512dot 256色モードは、Oh!X 1995年11月号に掲載された',CR,LF
  2281.     .dc.b    '             菊池功氏の "PageSync()関数"を使用させて頂いてます。',CR,LF
  2282.     .dc.b    '             256色モードのちらつきはテンキーの"+"と"-"で調節出来ます。',CR,LF
  2283.     .dc.b    0
  2284. no_file_mes:
  2285.     .dc.b    '表示できるファイルがありません!',CR,LF,0
  2286. name_er_mes:
  2287.     .dc.b    'ファイル名の指定に間違いがあります!',CR,LF,0
  2288. file_er_mes:
  2289.     .dc.b    ' はBMPファイルではないようです!',CR,LF,0
  2290. open_er_mes:
  2291.     .dc.b    ' が見つかりません!',CR,LF,0
  2292. read_er_mes:
  2293.     .dc.b    ' の読み込みエラーが発生しました!',CR,LF,0
  2294. no_buff_mes:
  2295.     .dc.b    ' の表示に必要なメモリがありません!',CR,LF,0
  2296. but_pos_mes:
  2297.     .dc.b    ' は指定した座標にロード出来ません!',CR,LF,0
  2298. *no_win3_mes:
  2299. *    .dc.b    ' はWindows 3.x用BMPファイルではありません!',CR,LF,0
  2300. but_col_mes:
  2301.     .dc.b    ' は未サポートの色数です!',CR,LF,0
  2302. no_support_mes:
  2303.     .dc.b    ' はサポートしていないBMPフォーマットです!',CR,LF,0
  2304. wait_change_mes:
  2305.     .dc.b    'ウェイト値を変更しました',CR,LF,0
  2306. crlf_mes:
  2307.     .dc.b    CR,LF,0
  2308. func_off_mes:
  2309.     .dc.b    $1b,$5b,$3e,$31,$68,0
  2310.  
  2311. dext:
  2312.     .dc.b    '.BMP',0        *補う拡張子
  2313. komekome:
  2314.     .dc.b    '\'
  2315. kome0:
  2316.     .dc.b    '*.BMP',0
  2317.  
  2318. wait_name:
  2319.     .dc.b    'bmp256.dat',0
  2320.     .even
  2321.  
  2322. kflg:
  2323.     .dcb.b    1,0            */Kスイッチon/offフラグ(=0...off,<>0...on)
  2324. sflg:
  2325.     .dcb.b    1,0            */Sスイッチon/offフラグ(=0...off,<>0...on)
  2326. cflg:
  2327.     .dcb.b    1,0            */Cスイッチon/offフラグ(=0...off,<>0...on)
  2328. lflg:
  2329.     .dcb.b    1,0            */Lスイッチon/offフラグ(=0...off,<>0...on)
  2330. lcflg:
  2331.     .dcb.b    1,0            */LCスイッチon/offフラグ(=0...off,<>0...on)
  2332. dflg:
  2333.     .dcb.b    1,0            */Dスイッチon/offフラグ(=0...off,<>0...on)
  2334. mflg:
  2335.     .dcb.b    1,0            */Mスイッチon/offフラグ(=0...off,<>0...on)
  2336. fflg:
  2337.     .dcb.b    1,0            */Fスイッチon/offフラグ(=0...off,<>0...on)
  2338. wflg:
  2339.     .dcb.b    1,0            */Wスイッチon/offフラグ(=0...off,<>0...on)
  2340. hflg:
  2341.     .dcb.b    1,0            */Hスイッチon/offフラグ(=0...off,<>0...on)
  2342. rflg:
  2343.     .dcb.b    1,0            */Rスイッチon/offフラグ(=0...off,<>0...on)
  2344. nflg:
  2345.     .dcb.b    1,0            */Nスイッチon/offフラグ(=0...off,<>0...on)
  2346. int_flg:
  2347.     .dcb.b    1,0            *
  2348. prt_flg:
  2349.     .dcb.b    1,0            *画像情報の表示/非表示フラグ
  2350.     .even
  2351. s_dot4:
  2352.     .dcb.w    1,8
  2353. s_dot8:
  2354.     .dcb.w    1,4
  2355. s_dot24:
  2356.     .dcb.w    1,8
  2357.  
  2358. crt_max:
  2359.     .dc.w    5-1
  2360. crtc_tbl:
  2361.     .dc.l    mode0
  2362.     .dc.l    mode1
  2363.     .dc.l    mode2
  2364.     .dc.l    mode3
  2365.     .dc.l    mode4
  2366.     .dc.l    mode5
  2367.     .dc.l    mode6
  2368. crtc_data:
  2369. *        HRL  R20  R00  R01  R02  R03  R04  R05  R06  R07  R08
  2370. mode0:    .dc.w    $00,$416, $89, $0E, $1C, $7C,$237, $05, $28,$228, $1B    * 768x512 31kHz
  2371. mode1:    .dc.w    $01,$411, $44, $05, $0A, $3A,$237, $05, $28,$228, $1B    * 384x256 31kHz
  2372. mode2:    .dc.w    $00,$415, $74, $09, $14, $64,$1D0, $07, $20,$1B0, $1B    * 640x400 24kHz
  2373. *mode3:    .dc.w    $00,$415, $72, $08, $14, $64,$1DA, $08, $1E,$1CE, $1B    * 640x432 24kHz
  2374. mode3:    .dc.w    $00,$416, $89, $0F, $21, $71,$204, $02, $20,$200, $16    * 640x480 31kHz
  2375. mode4    .dc.w    $00,$41e, $AC, $0C, $1D, $9D,$1DA, $08, $21,$1C9, $1B    *1024x848 24kHz
  2376. mode5:    .dc.w    $00,$116, $89, $0E, $1C, $7C,$237, $05, $28,$228, $1B    * 768*512 256色モード
  2377. mode6:    .dc.w    $00,$316, $89, $0E, $2C, $6C,$237, $05, $28,$228, $1B    * 512*512 64k色モード
  2378.  
  2379. dot_tbl:
  2380.     .dc.l    dot0
  2381.     .dc.l    dot1
  2382.     .dc.l    dot2
  2383.     .dc.l    dot3
  2384.     .dc.l    dot4
  2385.     .dc.l    dot5
  2386.     .dc.l    dot6
  2387.  
  2388. dot_data:
  2389. dot0:    .dc.w     768,512
  2390. dot1:    .dc.w     384,256
  2391. dot2:    .dc.w     640,400
  2392. dot3:    .dc.w     640,480
  2393. dot4:    .dc.w    1024,848
  2394. dot5:    .dc.w     768,512
  2395. dot6:    .dc.w     512,512
  2396.  
  2397. col1:    .dc.b    '2',0
  2398. col4:    .dc.b    '16',0
  2399. col8:    .dc.b    '256',0
  2400. col16:    .dc.b    '32k',0
  2401. col24:    .dc.b    'full',0
  2402. col??:    .dc.b    '????',0
  2403.  
  2404. inf1:    .dc.b    'ファイル名:',0
  2405. inf2:    .dc.b    '画像サイズ:',0
  2406. inf3:    .dc.b    '色数   :',0
  2407.     .even
  2408.  
  2409. d_pat:
  2410.     .dc.b     0, 4, 1, 5        *ディザパターン1
  2411.     .dc.b     6, 2, 7, 3
  2412.     .dc.b     1, 5, 0, 4
  2413.     .dc.b     7, 3, 6, 2
  2414.  
  2415. *    .dc.b     0, 4, 1, 5        *ディザパターン1'
  2416. *    .dc.b     7, 3, 6, 2
  2417. *    .dc.b     1, 5, 0, 4
  2418. *    .dc.b     6, 2, 7, 3
  2419.  
  2420. *    .dc.b     4, 6, 4, 6        *ディザパターン2(LDBMP Ver2互換)
  2421. *    .dc.b     0, 2, 0, 2
  2422. *    .dc.b     4, 6, 4, 6
  2423. *    .dc.b     0, 2, 0, 2
  2424.  
  2425. *****************************************************************
  2426. *    ワークエリア                        *
  2427. *****************************************************************
  2428.     .bss
  2429.     .even
  2430.  
  2431. filbuf:
  2432.     .ds.b    53            *ファイル情報格納バッファ
  2433. nambuf:
  2434.     .ds.b    92            *ファイル名展開用バッファ
  2435. arg:
  2436.     .ds.b    256            *ファイル名バッファ
  2437. arg2:
  2438.     .ds.b    256            *'bmp256.dat'用バッファ
  2439. prt_buf:
  2440.     .ds.b    96+3            *画面表示バッファ
  2441. num_buf:
  2442.     .ds.b    10+1            *数値変換バッファ
  2443.     .even
  2444. file_cnt:
  2445.     .ds.w    1            *ファイル数のカウント用バッファ
  2446. sp_save:
  2447.     .ds.l    1
  2448. buff_addr:
  2449.     .ds.l    1            *画像読み込みバッファアドレス
  2450. buff_size:
  2451.     .ds.l    1            *画像読み込みバッファサイズ
  2452. pal_addr:
  2453.     .ds.l    1            *パレットアドレス
  2454. gr_addr:
  2455.     .ds.l    1            *画像データアドレス
  2456. fi_size:
  2457.     .ds.l    1            *ファイルサイズ
  2458. os_type:
  2459.     .ds.w    1            *OSのタイプ
  2460. pal_cnt:
  2461.     .ds.w    1            *パレット数
  2462. yoko:
  2463.     .ds.w    1            *画像の横(X)サイズ
  2464. tate:
  2465.     .ds.w    1            *画像の縦(Y)サイズ
  2466. iro:
  2467.     .ds.w    1            *使用色数(BIT)
  2468. compress:
  2469.     .ds.w    1            *圧縮モード
  2470. line_byte:
  2471.     .ds.w    1            *1ラインのバイト数
  2472. crt_x:
  2473.     .ds.w    1            *画面のXサイズ
  2474. crt_y:
  2475.     .ds.w    1            *画面のYサイズ
  2476. x_pos:
  2477.     .ds.w    1            *ロード時のX座標
  2478. y_pos:
  2479.     .ds.w    1            *ロード時のY座標
  2480. x_max:
  2481.     .ds.w    1            *横スクロール数
  2482. y_max:
  2483.     .ds.w    1            *縦スクロール数
  2484. crt_mode:
  2485.     .ds.w    1            *画面モード
  2486. clr_mode:
  2487.     .ds.w    1            *画面クリアモード
  2488. bit4_crtdef:
  2489.     .ds.w    1            *16色BMPの画面モード
  2490. vctr_r0:
  2491.     .ds.w    1            
  2492. vctr_r2:
  2493.     .ds.w    1            
  2494. line_cnt:
  2495.     .ds.w    1
  2496. esc_flg:
  2497.     .ds.b    1            *
  2498. skip_flg:
  2499.     .ds.b    1            *
  2500. next_flg:
  2501.     .ds.b    1            *
  2502. resize_flg:
  2503.     .ds.b    1            *
  2504. inkey_flg1:
  2505.     .ds.b    1            *
  2506. inkey_flg2:
  2507.     .ds.b    1            *
  2508. inkey_flg3:
  2509.     .ds.b    1            *
  2510. scroll_key:
  2511.     .ds.b    1            *スクロール処理のキー
  2512. cur_save:
  2513.     .ds.b    1            *
  2514.     .even
  2515. wait:
  2516.     .ds.w    1            *768x512 256モードのウェイトワーク
  2517. my_stack:
  2518.     .ds.l    1024
  2519. mysp:
  2520.     .end    start
  2521.